<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
    function add(...args) {
      let num = 0;
      //当开始调用add的时候,首先把第一次传入的参数和求出来
      num = arg.reduce((p, c) => p + c, 0);
    //这里一定要有rest参数，否则累加是拿外部函数的args继续来累加的
      const temp = (...args) => {
        num = arg.reduce((p, c) => p + c, num)
        return temp;
      }
      //重写temp函数的toString方法,当函数转字符串的时候,会隐式转换调用自身的toString方法
      temp.toString = function () {
        return num
      }
      return temp;
    }

    //当函数被alert的时候,会默认调用自身的toString方法
    alert(add(1, 2)(2, 2)(3, 2)(1))
    alert(add(1, 2)(3))
    </script>
</body>

</html>